package mx.ipn.presentacion.empleado;

import java.util.Collection;

import com.trolltech.qt.gui.QTableWidget;
import com.trolltech.qt.gui.QTableWidgetItem;
import com.trolltech.qt.gui.QWidget;
import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.presentacion.Utilerias;

import mx.ipn.presentacion.empleado.ui.Ui_Puesto;
import mx.ipn.to.PuestoTO;
import mx.ipn.to.Puesto2TO;
import mx.ipn.to.TipoEmpleadoTO;

//import mx.ipn.negocios.empleado.PuestoBO;

public class ComportamientoPuesto extends QWidget {
	public static TipoEmpleadoTO[] preparaAgregarPuesto(Ui_Puesto agregarPuesto) {
		limpiarComponentesPuesto(agregarPuesto);
		agregarPuesto.pushButtonValorPuesto.setText("A&gregar");
		agregarPuesto.groupBoxAtributosPuesto.setEnabled(true);
		agregarPuesto.dockWidgetPuesto.setWindowTitle("Agregar Puesto");
		agregarPuesto.pushButtonBuscarPuesto.setEnabled(false);
		agregarPuesto.pushButtonLimpiarPuesto.setEnabled(false);
		agregarPuesto.pushButtonValorPuesto.setEnabled(false);
		agregarPuesto.comboBoxPuestoPuesto.setEnabled(false);
		agregarPuesto.comboBoxPuesto2Puesto.setEnabled(false);
		agregarPuesto.textEditDescripcionPuestoPuesto.setEnabled(false);

		TipoEmpleadoTO[] tiposEmpleadoTO = cargarTiposdeEmpleado(agregarPuesto);
		agregarPuesto.comboBoxTipoEmp2Puesto.setFocus();

		return tiposEmpleadoTO;
	}

	public static TipoEmpleadoTO[] preparaModificarPuesto(
			Ui_Puesto modificarPuesto) {
		limpiarComponentesPuesto(modificarPuesto);
		modificarPuesto.pushButtonValorPuesto.setText("&Modificar");
		modificarPuesto.groupBoxAtributosPuesto.setEnabled(true);
		modificarPuesto.dockWidgetPuesto.setWindowTitle("Modificar Puesto");
		modificarPuesto.pushButtonBuscarPuesto.setEnabled(false);
		modificarPuesto.pushButtonLimpiarPuesto.setEnabled(false);
		modificarPuesto.pushButtonValorPuesto.setEnabled(false);
		modificarPuesto.comboBoxPuestoPuesto.setEnabled(false);
		modificarPuesto.comboBoxPuesto2Puesto.setEnabled(false);
		modificarPuesto.textEditDescripcionPuestoPuesto.setEnabled(false);

		TipoEmpleadoTO[] tiposEmpleadoTO = cargarTiposdeEmpleado(modificarPuesto);
		modificarPuesto.comboBoxTipoEmpPuestoPuesto.setFocus();
		return tiposEmpleadoTO;
	}

	public static TipoEmpleadoTO[] preparaBajaPuesto(Ui_Puesto eliminarPuesto) {
		limpiarComponentesPuesto(eliminarPuesto);
		eliminarPuesto.pushButtonValorPuesto.setText("Dar de Baja");
		eliminarPuesto.groupBoxAtributosPuesto.setEnabled(true);
		eliminarPuesto.dockWidgetPuesto.setWindowTitle("Dar de Baja Puesto");
		eliminarPuesto.pushButtonBuscarPuesto.setEnabled(false);
		eliminarPuesto.pushButtonLimpiarPuesto.setEnabled(false);
		eliminarPuesto.groupBoxDetalleTipoPuesto.setEnabled(false);
		eliminarPuesto.groupBoxDetallePuestoPuesto.setEnabled(false);
		eliminarPuesto.pushButtonValorPuesto.setEnabled(false);
		eliminarPuesto.comboBoxPuestoPuesto.setEnabled(false);
		eliminarPuesto.comboBoxPuesto2Puesto.setEnabled(false);
		eliminarPuesto.textEditDescripcionPuestoPuesto.setEnabled(false);

		TipoEmpleadoTO[] tiposEmpleadoTO = cargarTiposdeEmpleado(eliminarPuesto);
		eliminarPuesto.comboBoxTipoEmpPuestoPuesto.setFocus();
		return tiposEmpleadoTO;
	}

	public static TipoEmpleadoTO[] cargarTiposdeEmpleado(Ui_Puesto puesto) {
		TipoEmpleadoTO[] tiposEmpleadoTO = (TipoEmpleadoTO[]) ConexionConNegocios
				.invocaServicio("obtenerTiposdeEmpleado",
						TipoEmpleadoTO[].class);
		if (tiposEmpleadoTO != null) {
			for (int x = 0; x < tiposEmpleadoTO.length; x++) {
				puesto.comboBoxTipoEmpPuestoPuesto.addItem(tiposEmpleadoTO[x]
						.getNombre());
				puesto.comboBoxTipoEmp2Puesto.addItem(tiposEmpleadoTO[x]
						.getNombre());
			}
		}
		puesto.comboBoxTipoEmpPuestoPuesto.setCurrentIndex(-1);
		puesto.comboBoxTipoEmp2Puesto.setCurrentIndex(-1);
		return tiposEmpleadoTO;
	}

	public static void agregarTabla(QTableWidget tableWidgetPuestoPuesto) {

		tableWidgetPuestoPuesto.setColumnCount(4);

		QTableWidgetItem __colItem = new QTableWidgetItem();
		__colItem.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", "Nombre"));
		tableWidgetPuestoPuesto.setHorizontalHeaderItem(0, __colItem);

		QTableWidgetItem __colItem1 = new QTableWidgetItem();
		__colItem1.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", "Descripci\u00f3n"));
		tableWidgetPuestoPuesto.setHorizontalHeaderItem(1, __colItem1);

		QTableWidgetItem __colItem2 = new QTableWidgetItem();
		__colItem2.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", "Tipo de Empleado"));
		tableWidgetPuestoPuesto.setHorizontalHeaderItem(2, __colItem2);

		QTableWidgetItem __colItem3 = new QTableWidgetItem();
		__colItem3.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", "Descripcion Tipo de Emp"));
		tableWidgetPuestoPuesto.setHorizontalHeaderItem(3, __colItem3);
		tableWidgetPuestoPuesto.setRowCount(0);

	}

	public static void llenarTablaBasico(QTableWidget tableWidgetPuestoPuesto,
			PuestoTO puesto, int x) {
		QTableWidgetItem __item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto.getNombre()));
		tableWidgetPuestoPuesto.setItem(x, 0, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto.getDescripcion()));
		tableWidgetPuestoPuesto.setItem(x, 1, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto.getTipoEmpleadoTO().getNombre()));
		tableWidgetPuestoPuesto.setItem(x, 2, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto.getTipoEmpleadoTO().getDescripcion()));
		tableWidgetPuestoPuesto.setItem(x, 3, __item);
		
		tableWidgetPuestoPuesto.resizeColumnToContents(0);
		tableWidgetPuestoPuesto.resizeColumnToContents(2);
		tableWidgetPuestoPuesto.setColumnWidth(3, 250);
	}

	public static void llenarTabla(QTableWidget tableWidgetPuestoPuesto,
			PuestoTO[] puesto) {

		tableWidgetPuestoPuesto.clear();
		agregarTabla(tableWidgetPuestoPuesto);
		tableWidgetPuestoPuesto.setRowCount(puesto.length);
		tableWidgetPuestoPuesto
				.setSelectionMode(com.trolltech.qt.gui.QAbstractItemView.SelectionMode.SingleSelection);

		for (int x = 0; x < puesto.length; x++) {
			llenarTablaBasico(tableWidgetPuestoPuesto, puesto[x], x);
		}
	}

	public static void noEditarPuesto(int x, int y,
			QTableWidget tableWidgetPuestoPuesto, PuestoTO[] puesto) {
		QTableWidgetItem __item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto[x].getNombre()));
		tableWidgetPuestoPuesto.setItem(x, 0, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto[x].getDescripcion()));
		tableWidgetPuestoPuesto.setItem(x, 1, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto[x].getTipoEmpleadoTO().getNombre()));
		tableWidgetPuestoPuesto.setItem(x, 2, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Puesto", puesto[x].getTipoEmpleadoTO().getDescripcion()));
		tableWidgetPuestoPuesto.setItem(x, 3, __item);
	}

	public static PuestoTO[] arrayArregloPuesto(Collection<PuestoTO> coleccion) {
		return (PuestoTO[]) coleccion.toArray(new PuestoTO[coleccion.size()]);
	}

	public static PuestoTO[] buscar(Ui_Puesto puesto, PuestoTO[] puestoTO) {
		
		if (puesto.comboBoxPuestoPuesto.currentIndex() == -1
				&& puestoTO != null) {
			puestoTO = (PuestoTO[]) ConexionConNegocios.invocaServicio(
					"obtenerPuestosActivos", PuestoTO[].class);
			Puesto2TO puesto2TO = new Puesto2TO();
			puesto2TO.setPuestoTO(puestoTO);
			puesto2TO
					.setIdTipoEmpleado((short) (puesto.comboBoxTipoEmpPuestoPuesto
							.currentIndex() + 1));

			PuestoTO[] puestoresTO = (PuestoTO[]) ConexionConNegocios
					.invocaServicio("buscarFiltarPuestos", puesto2TO,
							PuestoTO[].class);
			// PuestoTO[] puestoresTO =
			// PuestoBO.buscarFiltrarPuestos(puesto2TO);
			if (puestoresTO[0].getTipoError() > 0) {
				Utilerias.mostrarMensajeError(puesto.dockWidgetPuesto,
						puestoresTO[0]);
			} else {
				llenarTabla(puesto.tableWidgetPuestoPuesto, puestoresTO);
				puesto.groupBoxDetallePuesto.setEnabled(true);
				puestoTO = puestoresTO;
			}
		}
		return puestoTO;
	}

	public static PuestoTO[] tablaPrincipal(Ui_Puesto puesto) {
		PuestoTO[] puestoTO = null;
		puestoTO = (PuestoTO[]) ConexionConNegocios.invocaServicio(
				"obtenerPuestosActivos", PuestoTO[].class);
		if (puestoTO != null) {
			llenarTabla(puesto.tableWidgetPuestoPuesto, puestoTO);
		}

		return puestoTO;
	}

	public static PuestoTO[] limpiar(Ui_Puesto puesto) {
		PuestoTO[] puestoTO;
		puestoTO = tablaPrincipal(puesto);
		puesto.comboBoxPuestoPuesto.clear();
		puesto.comboBoxTipoEmpPuestoPuesto.setCurrentIndex(-1);
		puesto.groupBoxDetallePuesto.setEnabled(true);
		puesto.pushButtonLimpiarPuesto.setEnabled(false);
		puesto.pushButtonBuscarPuesto.setEnabled(false);
		puesto.comboBoxPuestoPuesto.setEnabled(false);
		return puestoTO;
	}

	public static void limpiarComponentesPuesto(Ui_Puesto puesto) {
		puesto.comboBoxPuesto2Puesto.clear();
		puesto.comboBoxPuesto2Puesto.setEditText("");
		puesto.comboBoxPuestoPuesto.clear();
		puesto.comboBoxTipoEmp2Puesto.clear();
		puesto.comboBoxTipoEmpPuestoPuesto.clear();
		puesto.textEditDescripcionPuestoPuesto.clear();
		puesto.textEditDescripcionTipoempPuesto.clear();
	}

	public static PuestoTO seleccionCelda(Ui_Puesto puesto, PuestoTO[] puestoTO) {
		PuestoTO respuestaTO = null;
		if (puestoTO != null) {
			respuestaTO = new PuestoTO();
			puesto.comboBoxTipoEmp2Puesto
					.setCurrentIndex(puestoTO[puesto.tableWidgetPuestoPuesto
							.currentRow()].getTipoEmpleadoTO()
							.getIdTipoEmpleado() - 1);
			puesto.comboBoxPuesto2Puesto
					.setEditText(puestoTO[puesto.tableWidgetPuestoPuesto
							.currentRow()].getNombre());
			puesto.textEditDescripcionPuestoPuesto
					.setText(puestoTO[puesto.tableWidgetPuestoPuesto
							.currentRow()].getDescripcion());
			puesto.textEditDescripcionTipoempPuesto
			.setText(puestoTO[puesto.tableWidgetPuestoPuesto
					.currentRow()].getTipoEmpleadoTO().getDescripcion());
			puesto.comboBoxPuesto2Puesto.setEnabled(true);
			respuestaTO = puestoTO[puesto.tableWidgetPuestoPuesto.currentRow()];
		}
		return respuestaTO;
	}
}
